package com.hongyi.common.framework.strategy;

import com.hongyi.common.framework.domain.LoginBody;
import com.hongyi.common.framework.domain.LoginVo;
import com.hongyi.common.framework.exception.ServiceException;
import com.hongyi.common.framework.utils.spring.SpringUtils;

/**
 * 策略模式登录
 *
 * @author DingHao
 */
public interface IAuthStrategy {

    /**
     * 登录
     *
     * <p>描述：接口中静态方法,使用策略模式通过authLogin方法登录</p>
     */
    static LoginVo login(LoginBody loginBody){
        //获取用户类型
        String grantType = loginBody.getGrantType();
        //验证用户类型对应实现类的Bean是否存在
        if (!SpringUtils.containsBean(grantType)) {
            throw new ServiceException("用户类型不正确");
        }
        //获取对应用户类型的Bean
        IAuthStrategy authLoginMethod = SpringUtils.getBean(grantType);
        //返回用户登录的内容
        return authLoginMethod.authLogin(loginBody);
    }

    /**
     * 登录方法
     *
     * <p>描述：多实现的策略模式</p>
     */
    LoginVo authLogin(LoginBody loginBody);

}
